模糊测试的方法分成哪几类
模糊测试的方法分成以下几类:
预生成测试用例:该方法要求首先研究特定的规约,理解该规约支持的数据结构和可接受的值的范围;然后依据这些理解生成用于测试边界条件或是违反规约的测试用例;接下来使用这些测试用例来测试该规约实现的完备性。创建所有这些测试用例需要花费很多精力,但这些用例一旦被创建,就很容易被复用,用于测试某种协议或文件格式的不同实现。预生成测试用例的缺点是,这种模糊测试方法存在固有的局限性。由于缺乏随机生成,一旦测试用例列表中的用例被执行完,测试就只能结束。预生成测试用例的缺点是,这种模糊测试方法存在固有的局限性。由于缺乏随机生成,一旦测试用例列表中的用例被执行完,测试就只能结束。
随机生成输入:随机方法是最低效的方式,但是这种方式可以被用来快速地识别目标应用中是否有非常糟糕的代码。随机方法简单地向目标应用发送伪随机数据,希望得到最好或是最坏的结果(最好还是最坏取决于你看问题的角度)。
手工协议变异测试:按说,手工协议测试应该比随机生成输入的方法在技术方面更加初级。手工协议测试不需要自动化模糊测试器。实际上,在手工测试中,测试者就是模糊测试器。在加载了目标应用后,测试者仅仅通过输入不正确的数据,试图使服务器崩溃,或是诱发一些不正常的行为。这是“穷人”的模糊测试方法,但在过去一些年来这种方法已经被证明是有效的。这种方法的优点在于,分析者能够在安全审计中充分发挥自己过去的经验和“直觉”。这类模糊测试方法最经常用于Web应用的安全测试。
变异或强制性测试:是指模糊测试器从一个有效的协议样本或是数据格式样本开始,持续不断的打乱数据包或是文件中的每一个字节(byte)、字(word)、双字(dword)或是字符串(string)。这是一种有效的早期模糊测试方法,因为这种方式几乎不要求对应用进行研究,而且,实现一个基础的强制性模糊测试器也相对直接。基本上,强制性模糊测试器只需要修改数据并将其发送给被测应用。当然,除了发送数据外,也可以在强制性模糊测试器中加入更多的错误检测手段、日志手段等。这样一个工具通常能够在短时间内被创建出来。
自动协议生成测试:自动协议生成测试是一种更高级的强制性方法。在这种方式中,首先要做的是对被测应用进行研究,理解和解释协议规约或文件定义。然而,这种方法并不基于协议规约或文件定义创建硬编码的测试用例,而是创建一个描述协议规约如何工作的文法(grammar)。采用这种方式,测试者可以识别出数据包或是文件中的静态部分和动态部分,动态部分就是可以被模糊化变量替代的部分。随后,模糊测试器动态分析包含了静态和动态部分的模板,生成模糊测试数据,将结果数据包或是文件发送给被测应用。